/**
 * 类的访问类型 - 默认不声明是 public 共用的
 * private(私有的-仅类内部使用) 
 * protected(保护的-仅类内部和继承的类内使用) 
 * public(共用的-类内部外部都可以使用)
 **/ 

class Person{
    public name : string = '小花';
    private age : number = 18;
    protected score : number = 99;
    public sayHello():void{
        console.log('Hello '+this.name);
    }
}

//子类里继承父类 私有的是不可调用的 但是 受保护的 是可以在子类里调用的，注意区分
class BanHua extends Person{
    public sayBye():void{
        //子类内可以调用共用类型的方法
        this.name = '貂蝉';
        this.sayHello();
        //子类调用私有类型的 age 会报错
        //this.age = 19;
        //子调用受保护类型的 score 不会报错
        this.score = 100;
        console.log(this.name,this.score);
    }
}

const person = new Person();
//类外调用共有类型的 name 和 sayHello 方法都是可以的
person.name = 'xiaoghua';
person.sayHello();
//类外调用私有类型的 age 会报错
//person.age = 19;
//类外调用受保护类型的 score 会报错
//person.score = 100;
console.log(person.name);

const bh = new BanHua();

bh.sayBye();